]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
modalDialog: Use a Gobject property to manage the state
authorMarco Trevisan (Treviño) <mail@3v1n0.net>
Thu, 23 May 2019 20:58:53 +0000 (15:58 -0500)
committerMarco Trevisan (Treviño) <mail@3v1n0.net>
Fri, 24 May 2019 21:28:18 +0000 (16:28 -0500)
Make the state read-only while add a "private" function to set it and notify
when it changes.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/55

js/ui/modalDialog.js

index 06476059b7e2ef5e793da82eae41f85c3caf205b..5d661e94a826dd1de913729fa47c581d72bef2d9 100644 (file)
@@ -22,6 +22,11 @@ var State = {
 };
 
 var ModalDialog = GObject.registerClass({
+    Properties: { 'state': GObject.ParamSpec.int('state', 'Dialog state', 'state',
+                                                 GObject.ParamFlags.READABLE,
+                                                 Math.min(...Object.values(State)),
+                                                 Math.max(...Object.values(State)),
+                                                 State.CLOSED) },
     Signals: { 'opened': {}, 'closed': {} }
 }, class ModalDialog extends St.Widget {
     _init(params) {
@@ -37,7 +42,7 @@ var ModalDialog = GObject.registerClass({
                                         shouldFadeOut: true,
                                         destroyOnClose: true });
 
-        this.state = State.CLOSED;
+        this._state = State.CLOSED;
         this._hasModal = false;
         this._actionMode = params.actionMode;
         this._shellReactive = params.shellReactive;
@@ -78,6 +83,18 @@ var ModalDialog = GObject.registerClass({
         this._savedKeyFocus = null;
     }
 
+    get state() {
+        return this._state;
+    }
+
+    _setState(state) {
+        if (this._state == state)
+            return;
+
+        this._state = state;
+        this.notify('state');
+    }
+
     clearButtons() {
         this.dialogLayout.clearButtons();
     }
@@ -99,7 +116,7 @@ var ModalDialog = GObject.registerClass({
         else
             this._monitorConstraint.index = global.display.get_current_monitor();
 
-        this.state = State.OPENING;
+        this._setState(State.OPENING);
 
         this.dialogLayout.opacity = 255;
         if (this._lightbox)
@@ -111,7 +128,7 @@ var ModalDialog = GObject.registerClass({
                            time: this._shouldFadeIn ? OPEN_AND_CLOSE_TIME : 0,
                            transition: 'easeOutQuad',
                            onComplete: () => {
-                               this.state = State.OPENED;
+                               this._setState(State.OPENED);
                                this.emit('opened');
                            }
                          });
@@ -141,7 +158,7 @@ var ModalDialog = GObject.registerClass({
     }
 
     _closeComplete() {
-        this.state = State.CLOSED;
+        this._setState(State.CLOSED);
         this.hide();
         this.emit('closed');
 
@@ -153,7 +170,7 @@ var ModalDialog = GObject.registerClass({
         if (this.state == State.CLOSED || this.state == State.CLOSING)
             return;
 
-        this.state = State.CLOSING;
+        this._setState(State.CLOSING);
         this.popModal(timestamp);
         this._savedKeyFocus = null;
 
@@ -235,7 +252,7 @@ var ModalDialog = GObject.registerClass({
                            time:    FADE_OUT_DIALOG_TIME,
                            transition: 'easeOutQuad',
                            onComplete: () => {
-                               this.state = State.FADED_OUT;
+                               this._setState(State.FADED_OUT);
                            }
                          });
     }